<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"> <style>
	.KEYW {color: #933;}
	.COMM {color: #bbb; font-style: italic;}
	.NUMB {color: #393;}
	.STRN {color: #393;}
	.REGX {color: #339;}
	.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
	</style></head><body><pre><span class='line'>  1</span> <span class="TOKN">﻿</span><span class="COMM">/*
<span class='line'>  2</span> Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
<span class='line'>  3</span> For licensing, see LICENSE.html or http://ckeditor.com/license
<span class='line'>  4</span> */</span><span class="WHIT">
<span class='line'>  5</span>
<span class='line'>  6</span> </span><span class="NAME">CKEDITOR.dom.range</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">document</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>  7</span> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>  8</span> </span><span class="WHIT">	</span><span class="NAME">this.startContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>  9</span> </span><span class="WHIT">	</span><span class="NAME">this.startOffset</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 10</span> </span><span class="WHIT">	</span><span class="NAME">this.endContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 11</span> </span><span class="WHIT">	</span><span class="NAME">this.endOffset</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 12</span> </span><span class="WHIT">	</span><span class="NAME">this.collapsed</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 13</span>
<span class='line'> 14</span> </span><span class="WHIT">	</span><span class="NAME">this.document</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">document</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 15</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 16</span>
<span class='line'> 17</span> </span><span class="PUNC">(</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 18</span> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 19</span> </span><span class="WHIT">	</span><span class="COMM">// Updates the "collapsed" property for the given range object.</span><span class="WHIT">
<span class='line'> 20</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">updateCollapsed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">range</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 21</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 22</span> </span><span class="WHIT">		</span><span class="NAME">range.collapsed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
<span class='line'> 23</span> </span><span class="WHIT">			</span><span class="NAME">range.startContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='line'> 24</span> </span><span class="WHIT">			</span><span class="NAME">range.endContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='line'> 25</span> </span><span class="WHIT">			</span><span class="NAME">range.startContainer.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">range.endContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT">
<span class='line'> 26</span> </span><span class="WHIT">			</span><span class="NAME">range.startOffset</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">range.endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 27</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span>
<span class='line'> 29</span> </span><span class="WHIT">	</span><span class="COMM">// This is a shared function used to delete, extract and clone the range</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="WHIT">	</span><span class="COMM">// contents.</span><span class="WHIT">
<span class='line'> 31</span> </span><span class="WHIT">	</span><span class="COMM">// V2</span><span class="WHIT">
<span class='line'> 32</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">execContentsAction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">range</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">action</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 33</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 34</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 35</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 36</span>
<span class='line'> 37</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range.endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 39</span>
<span class='line'> 40</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">removeStartNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">removeEndNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 42</span>
<span class='line'> 43</span> </span><span class="WHIT">		</span><span class="COMM">// For text containers, we must simply split the node and point to the</span><span class="WHIT">
<span class='line'> 44</span> </span><span class="WHIT">		</span><span class="COMM">// second part. The removal will be handled by the rest of the code .</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 46</span> </span><span class="WHIT">			</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="WHIT">		</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT">			</span><span class="COMM">// If the end container has children and the offset is pointing</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="WHIT">			</span><span class="COMM">// to a child, then we should start from it.</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 52</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 53</span> </span><span class="WHIT">				</span><span class="COMM">// If the offset points after the last node.</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">endNode.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="WHIT">					</span><span class="COMM">// Let's create a temporary node and mark it for removal.</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="WHIT">					</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.append</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">range.document.createText</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">''</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span> </span><span class="WHIT">					</span><span class="NAME">removeEndNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 59</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 60</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'> 61</span> </span><span class="WHIT">					</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 62</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 63</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 64</span>
<span class='line'> 65</span> </span><span class="WHIT">		</span><span class="COMM">// For text containers, we must simply split the node. The removal will</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="WHIT">		</span><span class="COMM">// be handled by the rest of the code .</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT">			</span><span class="NAME">startNode.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span>
<span class='line'> 71</span> </span><span class="WHIT">			</span><span class="COMM">// In cases the end node is the same as the start node, the above</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT">			</span><span class="COMM">// splitting will also split the end, so me must move the end to</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT">			</span><span class="COMM">// the second part of the split.</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT">				</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getNext</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT">		</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT">			</span><span class="COMM">// If the start container has children and the offset is pointing</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT">			</span><span class="COMM">// to a child, then we should start from its previous sibling.</span><span class="WHIT">
<span class='line'> 81</span>
<span class='line'> 82</span> </span><span class="WHIT">			</span><span class="COMM">// If the offset points to the first node, we don't have a</span><span class="WHIT">
<span class='line'> 83</span> </span><span class="WHIT">			</span><span class="COMM">// sibling, so let's use the first one, but mark it for removal.</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="WHIT">				</span><span class="COMM">// Let's create a temporary node and mark it for removal.</span><span class="WHIT">
<span class='line'> 87</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getFirst</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">insertBeforeMe</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">range.document.createText</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">''</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 88</span> </span><span class="WHIT">				</span><span class="NAME">removeStartNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 89</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">startNode.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="WHIT">				</span><span class="COMM">// Let's create a temporary node and mark it for removal.</span><span class="WHIT">
<span class='line'> 93</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.append</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">range.document.createText</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">''</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 94</span> </span><span class="WHIT">				</span><span class="NAME">removeStartNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 95</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'> 97</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getPrevious</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 98</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 99</span>
<span class='line'>100</span> </span><span class="WHIT">		</span><span class="COMM">// Get the parent nodes tree for the start and end boundaries.</span><span class="WHIT">
<span class='line'>101</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startParents</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getParents</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>102</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endParents</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.getParents</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>103</span>
<span class='line'>104</span> </span><span class="WHIT">		</span><span class="COMM">// Compare them, to find the top most siblings.</span><span class="WHIT">
<span class='line'>105</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topStart</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">topEnd</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span>
<span class='line'>107</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">startParents.length</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT">			</span><span class="NAME">topStart</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startParents</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT">			</span><span class="NAME">topEnd</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endParents</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>111</span>
<span class='line'>112</span> </span><span class="WHIT">			</span><span class="COMM">// The compared nodes will match until we find the top most</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT">			</span><span class="COMM">// siblings (different nodes that have the same parent).</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT">			</span><span class="COMM">// "i" will hold the index in the parents array for the top</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT">			</span><span class="COMM">// most element.</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">topStart.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">topEnd</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT">				</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>119</span>
<span class='line'>120</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">levelStartNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">levelClone</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">currentSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>121</span>
<span class='line'>122</span> </span><span class="WHIT">		</span><span class="COMM">// Remove all successive sibling nodes for every node in the</span><span class="WHIT">
<span class='line'>123</span> </span><span class="WHIT">		</span><span class="COMM">// startParents tree.</span><span class="WHIT">
<span class='line'>124</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">startParents.length</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>125</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>126</span> </span><span class="WHIT">			</span><span class="NAME">levelStartNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startParents</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>127</span>
<span class='line'>128</span> </span><span class="WHIT">			</span><span class="COMM">// For Extract and Clone, we must clone this level.</span><span class="WHIT">
<span class='line'>129</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">levelStartNode.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">		</span><span class="COMM">// action = 0 = Delete</span><span class="WHIT">
<span class='line'>130</span> </span><span class="WHIT">				</span><span class="NAME">levelClone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clone.append</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">levelStartNode.clone</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>131</span>
<span class='line'>132</span> </span><span class="WHIT">			</span><span class="NAME">currentNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">levelStartNode.getNext</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>133</span>
<span class='line'>134</span> </span><span class="WHIT">			</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT">				</span><span class="COMM">// Stop processing when the current node matches a node in the</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT">				</span><span class="COMM">// endParents tree or if it is the endNode.</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endParents</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">currentNode.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span>
<span class='line'>141</span> </span><span class="WHIT">				</span><span class="COMM">// Cache the next sibling.</span><span class="WHIT">
<span class='line'>142</span> </span><span class="WHIT">				</span><span class="NAME">currentSibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">currentNode.getNext</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>143</span>
<span class='line'>144</span> </span><span class="WHIT">				</span><span class="COMM">// If cloning, just clone it.</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">	</span><span class="COMM">// 2 = Clone</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT">					</span><span class="NAME">clone.append</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode.clone</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT">					</span><span class="COMM">// Both Delete and Extract will remove the node.</span><span class="WHIT">
<span class='line'>150</span> </span><span class="WHIT">					</span><span class="NAME">currentNode.remove</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>151</span>
<span class='line'>152</span> </span><span class="WHIT">					</span><span class="COMM">// When Extracting, move the removed node to the docFrag.</span><span class="WHIT">
<span class='line'>153</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">	</span><span class="COMM">// 1 = Extract</span><span class="WHIT">
<span class='line'>154</span> </span><span class="WHIT">						</span><span class="NAME">clone.append</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>155</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>156</span>
<span class='line'>157</span> </span><span class="WHIT">				</span><span class="NAME">currentNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">currentSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>159</span>
<span class='line'>160</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT">				</span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">levelClone</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>163</span>
<span class='line'>164</span> </span><span class="WHIT">		</span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>165</span>
<span class='line'>166</span> </span><span class="WHIT">		</span><span class="COMM">// Remove all previous sibling nodes for every node in the</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT">		</span><span class="COMM">// endParents tree.</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT">		</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">endParents.length</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>170</span> </span><span class="WHIT">			</span><span class="NAME">levelStartNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endParents</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>171</span>
<span class='line'>172</span> </span><span class="WHIT">			</span><span class="COMM">// For Extract and Clone, we must clone this level.</span><span class="WHIT">
<span class='line'>173</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">levelStartNode.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">		</span><span class="COMM">// action = 0 = Delete</span><span class="WHIT">
<span class='line'>174</span> </span><span class="WHIT">				</span><span class="NAME">levelClone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">clone.append</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">levelStartNode.clone</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span>
<span class='line'>176</span> </span><span class="WHIT">			</span><span class="COMM">// The processing of siblings may have already been done by the parent.</span><span class="WHIT">
<span class='line'>177</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">startParents</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">levelStartNode.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">startParents</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">$.parentNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>178</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>179</span> </span><span class="WHIT">				</span><span class="NAME">currentNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">levelStartNode.getPrevious</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>180</span>
<span class='line'>181</span> </span><span class="WHIT">				</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT">					</span><span class="COMM">// Stop processing when the current node matches a node in the</span><span class="WHIT">
<span class='line'>184</span> </span><span class="WHIT">					</span><span class="COMM">// startParents tree or if it is the startNode.</span><span class="WHIT">
<span class='line'>185</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startParents</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">currentNode.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>186</span> </span><span class="WHIT">						</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>187</span>
<span class='line'>188</span> </span><span class="WHIT">					</span><span class="COMM">// Cache the next sibling.</span><span class="WHIT">
<span class='line'>189</span> </span><span class="WHIT">					</span><span class="NAME">currentSibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">currentNode.getPrevious</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>190</span>
<span class='line'>191</span> </span><span class="WHIT">					</span><span class="COMM">// If cloning, just clone it.</span><span class="WHIT">
<span class='line'>192</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">	</span><span class="COMM">// 2 = Clone</span><span class="WHIT">
<span class='line'>193</span> </span><span class="WHIT">						</span><span class="NAME">clone.$.insertBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode.$.cloneNode</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">clone.$.firstChild</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT">					</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT">						</span><span class="COMM">// Both Delete and Extract will remove the node.</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT">						</span><span class="NAME">currentNode.remove</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span>
<span class='line'>199</span> </span><span class="WHIT">						</span><span class="COMM">// When Extracting, mode the removed node to the docFrag.</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">	</span><span class="COMM">// 1 = Extract</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT">							</span><span class="NAME">clone.$.insertBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">currentNode.$</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">clone.$.firstChild</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>203</span>
<span class='line'>204</span> </span><span class="WHIT">					</span><span class="NAME">currentNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">currentSibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>206</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>207</span>
<span class='line'>208</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT">				</span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">levelClone</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>211</span>
<span class='line'>212</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">action</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">		</span><span class="COMM">// 2 = Clone.</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT">			</span><span class="COMM">// No changes in the DOM should be done, so fix the split text (if any).</span><span class="WHIT">
<span class='line'>215</span>
<span class='line'>216</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startTextNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startTextNode.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT">				</span><span class="NAME">startTextNode.$.data</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startTextNode.$.nextSibling.data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT">				</span><span class="NAME">startTextNode.$.parentNode.removeChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startTextNode.$.nextSibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>222</span>
<span class='line'>223</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endTextNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">range.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endTextNode.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">endTextNode.$.nextSibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT">				</span><span class="NAME">endTextNode.$.data</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endTextNode.$.nextSibling.data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT">				</span><span class="NAME">endTextNode.$.parentNode.removeChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endTextNode.$.nextSibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>228</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>229</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT">		</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT">			</span><span class="COMM">// Collapse the range.</span><span class="WHIT">
<span class='line'>233</span>
<span class='line'>234</span> </span><span class="WHIT">			</span><span class="COMM">// If a node has been partially selected, collapse the range between</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT">			</span><span class="COMM">// topStart and topEnd. Otherwise, simply collapse it to the start. (W3C specs).</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">topStart</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">topEnd</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">topStart.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">endNode.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">topEnd.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endIndex</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">topEnd.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span>
<span class='line'>240</span> </span><span class="WHIT">				</span><span class="COMM">// If the start node is to be removed, we must correct the</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT">				</span><span class="COMM">// index to reflect the removal.</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">removeStartNode</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">topEnd.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">startNode.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT">					</span><span class="NAME">endIndex</span><span class="PUNC">--</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span>
<span class='line'>245</span> </span><span class="WHIT">				</span><span class="NAME">range.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">topEnd.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endIndex</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>247</span>
<span class='line'>248</span> </span><span class="WHIT">			</span><span class="COMM">// Collapse it to the start.</span><span class="WHIT">
<span class='line'>249</span> </span><span class="WHIT">			</span><span class="NAME">range.collapse</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>250</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>251</span>
<span class='line'>252</span> </span><span class="WHIT">		</span><span class="COMM">// Cleanup any marked node.</span><span class="WHIT">
<span class='line'>253</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">removeStartNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>254</span> </span><span class="WHIT">			</span><span class="NAME">startNode.remove</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span>
<span class='line'>256</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">removeEndNode</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">endNode.$.parentNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>257</span> </span><span class="WHIT">			</span><span class="NAME">endNode.remove</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>258</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>259</span>
<span class='line'>260</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">inlineChildReqElements</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">abbr</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">acronym</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">b</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">bdo</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">big</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">cite</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">code</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">del</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">dfn</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">em</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">font</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">ins</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">label</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">kbd</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">q</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">samp</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">small</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">span</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">strike</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">strong</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">sub</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">sup</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">tt</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="NAME">u</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="STRN">'var'</span><span class="PUNC">:</span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>261</span>
<span class='line'>262</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getBoundaryNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>263</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>264</span> </span><span class="WHIT">		</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>265</span> </span><span class="WHIT">			</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>266</span> </span><span class="WHIT">			</span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>267</span> </span><span class="WHIT">			</span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT">			</span><span class="NAME">childCount</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>269</span>
<span class='line'>270</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT">			</span><span class="NAME">childCount</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">childCount</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>274</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">childCount</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getPreviousSourceNode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT">		</span><span class="COMM">// startOffset > childCount but childCount is not 0</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT">				</span><span class="COMM">// Try to take the node just after the current position.</span><span class="WHIT">
<span class='line'>280</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.$</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span> </span><span class="WHIT">				</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode.lastChild</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT">					</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.lastChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.node</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>284</span>
<span class='line'>285</span> </span><span class="WHIT">				</span><span class="COMM">// Normally we should take the next node in DFS order. But it</span><span class="WHIT">
<span class='line'>286</span> </span><span class="WHIT">				</span><span class="COMM">// is also possible that we've already reached the end of</span><span class="WHIT">
<span class='line'>287</span> </span><span class="WHIT">				</span><span class="COMM">// document.</span><span class="WHIT">
<span class='line'>288</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.getNextSourceNode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>291</span> </span><span class="WHIT">		</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>292</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT">			</span><span class="NAME">childCount</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">childCount</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT">				</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">getPreviousSourceNode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">childCount</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT">				</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.getPreviousSourceNode</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT">		</span><span class="COMM">// endOffset > childCount but childCount is not 0</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT">				</span><span class="COMM">// Try to take the node just before the current position.</span><span class="WHIT">
<span class='line'>301</span> </span><span class="WHIT">				</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.$</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>302</span> </span><span class="WHIT">				</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode.lastChild</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>303</span> </span><span class="WHIT">					</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode.lastChild</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>304</span> </span><span class="WHIT">				</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.node</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>307</span>
<span class='line'>308</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>310</span>
<span class='line'>311</span> </span><span class="WHIT">	</span><span class="COMM">// Check every node between the block boundary and the startNode or endNode.</span><span class="WHIT">
<span class='line'>312</span> </span><span class="WHIT">	</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">getCheckStartEndBlockFunction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">isStart</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>313</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>314</span> </span><span class="WHIT">		</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">evt</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>315</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT">			</span><span class="COMM">// Don't check the block boundary itself.</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.stopped</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">evt.data.node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span>
<span class='line'>320</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">evt.data.node</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>321</span> </span><span class="WHIT">				</span><span class="NAME">hadBr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>324</span> </span><span class="WHIT">				</span><span class="COMM">// If there are non-empty inline elements (e.g. &lt;img />), then we're not</span><span class="WHIT">
<span class='line'>325</span> </span><span class="WHIT">				</span><span class="COMM">// at the start.</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">inlineChildReqElements</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">node.getName</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>327</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>328</span> </span><span class="WHIT">					</span><span class="COMM">// If we're working at the end-of-block, forgive the first &lt;br />.</span><span class="WHIT">
<span class='line'>329</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">isStart</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">node.getName</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="STRN">'br'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">hadBr</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>330</span> </span><span class="WHIT">						</span><span class="NAME">hadBr</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>331</span> </span><span class="WHIT">					</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>332</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>333</span> </span><span class="WHIT">						</span><span class="NAME">this.checkFailed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>334</span> </span><span class="WHIT">						</span><span class="NAME">this.stop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>336</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>337</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>340</span> </span><span class="WHIT">				</span><span class="COMM">// If there's any visible text, then we're not at the start.</span><span class="WHIT">
<span class='line'>341</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">visibleText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.tools.trim</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.getText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>342</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">visibleText.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>343</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>344</span> </span><span class="WHIT">					</span><span class="NAME">this.checkFailed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>345</span> </span><span class="WHIT">					</span><span class="NAME">this.stop</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>348</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>349</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>350</span>
<span class='line'>351</span>
<span class='line'>352</span> </span><span class="WHIT">	</span><span class="NAME">CKEDITOR.dom.range.prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>353</span> </span><span class="WHIT">	</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>354</span> </span><span class="WHIT">		</span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>355</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>356</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.range</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.document</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>357</span>
<span class='line'>358</span> </span><span class="WHIT">			</span><span class="NAME">clone.startContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>359</span> </span><span class="WHIT">			</span><span class="NAME">clone.startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>360</span> </span><span class="WHIT">			</span><span class="NAME">clone.endContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>361</span> </span><span class="WHIT">			</span><span class="NAME">clone.endOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>362</span> </span><span class="WHIT">			</span><span class="NAME">clone.collapsed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.collapsed</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>363</span>
<span class='line'>364</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>365</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>366</span>
<span class='line'>367</span> </span><span class="WHIT">		</span><span class="NAME">collapse</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toStart</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>368</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>369</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">toStart</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>370</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>371</span> </span><span class="WHIT">				</span><span class="NAME">this.endContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>372</span> </span><span class="WHIT">				</span><span class="NAME">this.endOffset</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>373</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>374</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>375</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>376</span> </span><span class="WHIT">				</span><span class="NAME">this.startContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>377</span> </span><span class="WHIT">				</span><span class="NAME">this.startOffset</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>378</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>379</span>
<span class='line'>380</span> </span><span class="WHIT">			</span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>381</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>382</span>
<span class='line'>383</span> </span><span class="WHIT">		</span><span class="COMM">// The selection may be lost when cloning (due to the splitText() call).</span><span class="WHIT">
<span class='line'>384</span> </span><span class="WHIT">		</span><span class="NAME">cloneContents</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>385</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>386</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.documentFragment</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.document</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>387</span>
<span class='line'>388</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>389</span> </span><span class="WHIT">				</span><span class="NAME">execContentsAction</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>390</span>
<span class='line'>391</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>392</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>393</span>
<span class='line'>394</span> </span><span class="WHIT">		</span><span class="NAME">deleteContents</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>395</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>396</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>397</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>398</span>
<span class='line'>399</span> </span><span class="WHIT">			</span><span class="NAME">execContentsAction</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>400</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>401</span>
<span class='line'>402</span> </span><span class="WHIT">		</span><span class="NAME">extractContents</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>403</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>404</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.documentFragment</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.document</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>405</span>
<span class='line'>406</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>407</span> </span><span class="WHIT">				</span><span class="NAME">execContentsAction</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>408</span>
<span class='line'>409</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">docFrag</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>410</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>411</span>
<span class='line'>412</span> </span><span class="WHIT">		</span><span class="COMM">// This is an "intrusive" way to create a bookmark. It includes &lt;span> tags</span><span class="WHIT">
<span class='line'>413</span> </span><span class="WHIT">		</span><span class="COMM">// in the range boundaries. The advantage of it is that it is possible to</span><span class="WHIT">
<span class='line'>414</span> </span><span class="WHIT">		</span><span class="COMM">// handle DOM mutations when moving back to the bookmark.</span><span class="WHIT">
<span class='line'>415</span> </span><span class="WHIT">		</span><span class="COMM">// Attention: the inclusion of nodes in the DOM is a design choice and</span><span class="WHIT">
<span class='line'>416</span> </span><span class="WHIT">		</span><span class="COMM">// should not be changed as there are other points in the code that may be</span><span class="WHIT">
<span class='line'>417</span> </span><span class="WHIT">		</span><span class="COMM">// using those nodes to perform operations. See GetBookmarkNode.</span><span class="WHIT">
<span class='line'>418</span> </span><span class="WHIT">		</span><span class="NAME">createBookmark</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>419</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>420</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>421</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">clone</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>422</span>
<span class='line'>423</span> </span><span class="WHIT">			</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.document.createElement</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'span'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>424</span> </span><span class="WHIT">			</span><span class="NAME">startNode.setAttribute</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'_fck_bookmark'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>425</span> </span><span class="WHIT">			</span><span class="NAME">startNode.setStyle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'display'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'none'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>426</span>
<span class='line'>427</span> </span><span class="WHIT">			</span><span class="COMM">// For IE, it must have something inside, otherwise it may be</span><span class="WHIT">
<span class='line'>428</span> </span><span class="WHIT">			</span><span class="COMM">// removed during DOM operations.</span><span class="WHIT">
<span class='line'>429</span> </span><span class="WHIT">			</span><span class="NAME">startNode.setHtml</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'&nbsp;'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>430</span>
<span class='line'>431</span> </span><span class="WHIT">			</span><span class="COMM">// If collapsed, the endNode will not be created.</span><span class="WHIT">
<span class='line'>432</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>433</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>434</span> </span><span class="WHIT">				</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode.clone</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>435</span> </span><span class="WHIT">				</span><span class="NAME">endNode.setHtml</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'&nbsp;'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>436</span>
<span class='line'>437</span> </span><span class="WHIT">				</span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clone</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>438</span> </span><span class="WHIT">				</span><span class="NAME">clone.collapse</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>439</span> </span><span class="WHIT">				</span><span class="NAME">clone.insertNode</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>440</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>441</span>
<span class='line'>442</span> </span><span class="WHIT">			</span><span class="NAME">clone</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.clone</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>443</span> </span><span class="WHIT">			</span><span class="NAME">clone.collapse</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>444</span> </span><span class="WHIT">			</span><span class="NAME">clone.insertNode</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>445</span>
<span class='line'>446</span> </span><span class="WHIT">			</span><span class="COMM">// Update the range position.</span><span class="WHIT">
<span class='line'>447</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>448</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>449</span> </span><span class="WHIT">				</span><span class="NAME">this.setStartAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>450</span> </span><span class="WHIT">				</span><span class="NAME">this.setEndBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>451</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>452</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>453</span> </span><span class="WHIT">				</span><span class="NAME">this.moveToPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_AFTER_END</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>454</span>
<span class='line'>455</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>456</span> </span><span class="WHIT">				</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>457</span> </span><span class="WHIT">				</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT">
<span class='line'>458</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>459</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>460</span>
<span class='line'>461</span> </span><span class="WHIT">		</span><span class="NAME">moveToBookmark</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">bookmark</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>462</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>463</span> </span><span class="WHIT">			</span><span class="COMM">// Set the range start at the bookmark start node position.</span><span class="WHIT">
<span class='line'>464</span> </span><span class="WHIT">			</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">bookmark.startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>465</span>
<span class='line'>466</span> </span><span class="WHIT">			</span><span class="COMM">// Remove it, because it may interfere in the setEndBefore call.</span><span class="WHIT">
<span class='line'>467</span> </span><span class="WHIT">			</span><span class="NAME">bookmark.startNode.remove</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>468</span>
<span class='line'>469</span> </span><span class="WHIT">			</span><span class="COMM">// Set the range end at the bookmark end node position, or simply</span><span class="WHIT">
<span class='line'>470</span> </span><span class="WHIT">			</span><span class="COMM">// collapse it if it is not available.</span><span class="WHIT">
<span class='line'>471</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">bookmark.endNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>472</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>473</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>474</span> </span><span class="WHIT">				</span><span class="NAME">this.setEndBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>475</span> </span><span class="WHIT">				</span><span class="NAME">endNode.remove</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>476</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>477</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>478</span> </span><span class="WHIT">				</span><span class="NAME">this.collapse</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>479</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>480</span>
<span class='line'>481</span> </span><span class="WHIT">		</span><span class="NAME">getCommonAncestor</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">includeSelf</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>482</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>483</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>484</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>485</span>
<span class='line'>486</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">start.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>487</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>488</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">includeSelf</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">start.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>489</span> </span><span class="WHIT">					</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">start.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>490</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>491</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>492</span>
<span class='line'>493</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">end.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">end.contains</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>494</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">end</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>495</span>
<span class='line'>496</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">start.type</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>497</span> </span><span class="WHIT">				</span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">start.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>498</span>
<span class='line'>499</span> </span><span class="WHIT">			</span><span class="KEYW">do</span><span class="WHIT">
<span class='line'>500</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>501</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">start.contains</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">end</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>502</span> </span><span class="WHIT">					</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">start</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>503</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>504</span> </span><span class="WHIT">			</span><span class="KEYW">while</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">start</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">start.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>505</span>
<span class='line'>506</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>507</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>508</span>
<span class='line'>509</span> </span><span class="WHIT">		</span><span class="COMM">/**
<span class='line'>510</span> 		 * Transforms the startContainer and endContainer properties from text
<span class='line'>511</span> 		 * nodes to element nodes, whenever possible. This is actually possible
<span class='line'>512</span> 		 * if either of the boundary containers point to a text node, and its
<span class='line'>513</span> 		 * offset is set to zero, or after the last char in the node.
<span class='line'>514</span> 		 */</span><span class="WHIT">
<span class='line'>515</span> </span><span class="WHIT">		</span><span class="NAME">optimize</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>516</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>517</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>518</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>519</span>
<span class='line'>520</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container.type</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>521</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>522</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>523</span> </span><span class="WHIT">					</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>524</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">container.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>525</span> </span><span class="WHIT">					</span><span class="NAME">this.setStartAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>526</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>527</span>
<span class='line'>528</span> </span><span class="WHIT">			</span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>529</span> </span><span class="WHIT">			</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>530</span>
<span class='line'>531</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container.type</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>532</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>533</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>534</span> </span><span class="WHIT">					</span><span class="NAME">this.setEndBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>535</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">container.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>536</span> </span><span class="WHIT">					</span><span class="NAME">this.setEndAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>537</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>538</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>539</span>
<span class='line'>540</span> </span><span class="WHIT">		</span><span class="NAME">trim</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">ignoreStart</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">ignoreEnd</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>541</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>542</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>543</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>544</span>
<span class='line'>545</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>546</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>547</span>
<span class='line'>548</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ignoreStart</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">startContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">startContainer.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>549</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>550</span> </span><span class="WHIT">				</span><span class="COMM">// If the offset is zero, we just insert the new node before</span><span class="WHIT">
<span class='line'>551</span> </span><span class="WHIT">				</span><span class="COMM">// the start.</span><span class="WHIT">
<span class='line'>552</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>553</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>554</span> </span><span class="WHIT">					</span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>555</span> </span><span class="WHIT">					</span><span class="NAME">startContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>556</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>557</span> </span><span class="WHIT">				</span><span class="COMM">// If the offset is at the end, we'll insert it after the text</span><span class="WHIT">
<span class='line'>558</span> </span><span class="WHIT">				</span><span class="COMM">// node.</span><span class="WHIT">
<span class='line'>559</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">startContainer.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>560</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>561</span> </span><span class="WHIT">					</span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>562</span> </span><span class="WHIT">					</span><span class="NAME">startContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>563</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>564</span> </span><span class="WHIT">				</span><span class="COMM">// In other case, we split the text node and insert the new</span><span class="WHIT">
<span class='line'>565</span> </span><span class="WHIT">				</span><span class="COMM">// node at the split point.</span><span class="WHIT">
<span class='line'>566</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>567</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>568</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>569</span>
<span class='line'>570</span> </span><span class="WHIT">					</span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>571</span> </span><span class="WHIT">					</span><span class="NAME">startContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>572</span>
<span class='line'>573</span> </span><span class="WHIT">					</span><span class="COMM">// Check if it is necessary to update the end boundary.</span><span class="WHIT">
<span class='line'>574</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>575</span> </span><span class="WHIT">						</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>576</span> </span><span class="WHIT">					</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.startContainer.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>577</span> </span><span class="WHIT">						</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">nextText</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>578</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>579</span>
<span class='line'>580</span> </span><span class="WHIT">				</span><span class="NAME">this.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>581</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>582</span>
<span class='line'>583</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">ignoreEnd</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">endContainer</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">endContainer.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>584</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>585</span> </span><span class="WHIT">				</span><span class="COMM">// If the offset is zero, we just insert the new node before</span><span class="WHIT">
<span class='line'>586</span> </span><span class="WHIT">				</span><span class="COMM">// the start.</span><span class="WHIT">
<span class='line'>587</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>588</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>589</span> </span><span class="WHIT">					</span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endContainer.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>590</span> </span><span class="WHIT">					</span><span class="NAME">endContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endContainer.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>591</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>592</span> </span><span class="WHIT">				</span><span class="COMM">// If the offset is at the end, we'll insert it after the text</span><span class="WHIT">
<span class='line'>593</span> </span><span class="WHIT">				</span><span class="COMM">// node.</span><span class="WHIT">
<span class='line'>594</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">>=</span><span class="WHIT"> </span><span class="NAME">endContainer.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>595</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>596</span> </span><span class="WHIT">					</span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endContainer.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>597</span> </span><span class="WHIT">					</span><span class="NAME">endContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endContainer.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>598</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>599</span> </span><span class="WHIT">				</span><span class="COMM">// In other case, we split the text node and insert the new</span><span class="WHIT">
<span class='line'>600</span> </span><span class="WHIT">				</span><span class="COMM">// node at the split point.</span><span class="WHIT">
<span class='line'>601</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>602</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>603</span> </span><span class="WHIT">					</span><span class="NAME">endContainer.split</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>604</span>
<span class='line'>605</span> </span><span class="WHIT">					</span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endContainer.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>606</span> </span><span class="WHIT">					</span><span class="NAME">endContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endContainer.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>607</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>608</span>
<span class='line'>609</span> </span><span class="WHIT">				</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endContainer</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>610</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>611</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>612</span>
<span class='line'>613</span> </span><span class="WHIT">		</span><span class="NAME">enlarge</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">unit</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>614</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>615</span> </span><span class="WHIT">			</span><span class="KEYW">switch</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">unit</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>616</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>617</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.ENLARGE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>618</span>
<span class='line'>619</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.collapsed</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>620</span> </span><span class="WHIT">						</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>621</span>
<span class='line'>622</span> </span><span class="WHIT">					</span><span class="COMM">// Get the common ancestor.</span><span class="WHIT">
<span class='line'>623</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">commonAncestor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.getCommonAncestor</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>624</span>
<span class='line'>625</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">body</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.document.getBody</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>626</span>
<span class='line'>627</span> </span><span class="WHIT">					</span><span class="COMM">// For each boundary</span><span class="WHIT">
<span class='line'>628</span> </span><span class="WHIT">					</span><span class="COMM">//		a. Depending on its position, find out the first node to be checked (a sibling) or, if not available, to be enlarge.</span><span class="WHIT">
<span class='line'>629</span> </span><span class="WHIT">					</span><span class="COMM">//		b. Go ahead checking siblings and enlarging the boundary as much as possible until the common ancestor is not reached. After reaching the common ancestor, just save the enlargeable node to be used later.</span><span class="WHIT">
<span class='line'>630</span>
<span class='line'>631</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startTop</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endTop</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>632</span>
<span class='line'>633</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">commonReached</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>634</span>
<span class='line'>635</span> </span><span class="WHIT">					</span><span class="COMM">// Indicates that the node can be added only if whitespace</span><span class="WHIT">
<span class='line'>636</span> </span><span class="WHIT">					</span><span class="COMM">// is available before it.</span><span class="WHIT">
<span class='line'>637</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>638</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isWhiteSpace</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>639</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">siblingText</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>640</span>
<span class='line'>641</span> </span><span class="WHIT">					</span><span class="COMM">// Process the start boundary.</span><span class="WHIT">
<span class='line'>642</span>
<span class='line'>643</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>644</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>645</span>
<span class='line'>646</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>647</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>648</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>649</span> </span><span class="WHIT">						</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>650</span> </span><span class="WHIT">							</span><span class="COMM">// Check if there is any non-space text before the</span><span class="WHIT">
<span class='line'>651</span> </span><span class="WHIT">							</span><span class="COMM">// offset. Otherwise, container is null.</span><span class="WHIT">
<span class='line'>652</span> </span><span class="WHIT">							</span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">CKEDITOR.tools.trim</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container.substring</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>653</span>
<span class='line'>654</span> </span><span class="WHIT">							</span><span class="COMM">// If we found only whitespace in the node, it</span><span class="WHIT">
<span class='line'>655</span> </span><span class="WHIT">							</span><span class="COMM">// means that we'll need more whitespace to be able</span><span class="WHIT">
<span class='line'>656</span> </span><span class="WHIT">							</span><span class="COMM">// to expand. For example, &lt;i> can be expanded in</span><span class="WHIT">
<span class='line'>657</span> </span><span class="WHIT">							</span><span class="COMM">// "A &lt;i> [B]&lt;/i>", but not in "A&lt;i> [B]&lt;/i>".</span><span class="WHIT">
<span class='line'>658</span> </span><span class="WHIT">							</span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">!</span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>659</span> </span><span class="WHIT">						</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>660</span>
<span class='line'>661</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>662</span> </span><span class="WHIT">						</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>663</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.getPrevious</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>664</span> </span><span class="WHIT">								</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>665</span> </span><span class="WHIT">						</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>666</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>667</span> </span><span class="WHIT">					</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>668</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>669</span> </span><span class="WHIT">						</span><span class="COMM">// If we have offset, get the node preceeding it as the</span><span class="WHIT">
<span class='line'>670</span> </span><span class="WHIT">						</span><span class="COMM">// first sibling to be checked.</span><span class="WHIT">
<span class='line'>671</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>672</span> </span><span class="WHIT">							</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">container.getLast</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>673</span>
<span class='line'>674</span> </span><span class="WHIT">						</span><span class="COMM">// If there is no sibling, mark the container to be</span><span class="WHIT">
<span class='line'>675</span> </span><span class="WHIT">						</span><span class="COMM">// enlarged.</span><span class="WHIT">
<span class='line'>676</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>677</span> </span><span class="WHIT">							</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>678</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>679</span>
<span class='line'>680</span> </span><span class="WHIT">					</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>681</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>682</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>683</span> </span><span class="WHIT">						</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>684</span> </span><span class="WHIT">							</span><span class="COMM">// If we reached the common ancestor, mark the flag</span><span class="WHIT">
<span class='line'>685</span> </span><span class="WHIT">							</span><span class="COMM">// for it.</span><span class="WHIT">
<span class='line'>686</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">enlargeable.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonAncestor</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>687</span> </span><span class="WHIT">								</span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>688</span>
<span class='line'>689</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">body.contains</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>690</span> </span><span class="WHIT">								</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>691</span>
<span class='line'>692</span> </span><span class="WHIT">							</span><span class="COMM">// If we don't need space or this element breaks</span><span class="WHIT">
<span class='line'>693</span> </span><span class="WHIT">							</span><span class="COMM">// the line, then enlarge it.</span><span class="WHIT">
<span class='line'>694</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">enlargeable.getComputedStyle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'display'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'inline'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>695</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>696</span> </span><span class="WHIT">								</span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>697</span>
<span class='line'>698</span> </span><span class="WHIT">								</span><span class="COMM">// If the common ancestor has been reached,</span><span class="WHIT">
<span class='line'>699</span> </span><span class="WHIT">								</span><span class="COMM">// we'll not enlarge it immediately, but just</span><span class="WHIT">
<span class='line'>700</span> </span><span class="WHIT">								</span><span class="COMM">// mark it to be enlarged later if the end</span><span class="WHIT">
<span class='line'>701</span> </span><span class="WHIT">								</span><span class="COMM">// boundary also enlarges it.</span><span class="WHIT">
<span class='line'>702</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>703</span> </span><span class="WHIT">									</span><span class="NAME">startTop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>704</span> </span><span class="WHIT">								</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>705</span> </span><span class="WHIT">									</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>706</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>707</span>
<span class='line'>708</span> </span><span class="WHIT">							</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable.getPrevious</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>709</span> </span><span class="WHIT">						</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>710</span>
<span class='line'>711</span> </span><span class="WHIT">						</span><span class="COMM">// Check all sibling nodes preceeding the enlargeable</span><span class="WHIT">
<span class='line'>712</span> </span><span class="WHIT">						</span><span class="COMM">// node. The node wil lbe enlarged only if none of them</span><span class="WHIT">
<span class='line'>713</span> </span><span class="WHIT">						</span><span class="COMM">// blocks it.</span><span class="WHIT">
<span class='line'>714</span> </span><span class="WHIT">						</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>715</span> </span><span class="WHIT">						</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>716</span> </span><span class="WHIT">							</span><span class="COMM">// This flag indicates that this node has</span><span class="WHIT">
<span class='line'>717</span> </span><span class="WHIT">							</span><span class="COMM">// whitespaces at the end.</span><span class="WHIT">
<span class='line'>718</span> </span><span class="WHIT">							</span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>719</span>
<span class='line'>720</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>721</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>722</span> </span><span class="WHIT">								</span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.getText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>723</span>
<span class='line'>724</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="REGX">/[^\s\ufeff]/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>725</span> </span><span class="WHIT">									</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>726</span>
<span class='line'>727</span> </span><span class="WHIT">								</span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/[\s\ufeff]$/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>728</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>729</span> </span><span class="WHIT">							</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>730</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>731</span> </span><span class="WHIT">								</span><span class="COMM">// If this is a visible element.</span><span class="WHIT">
<span class='line'>732</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling.$.offsetWidth</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>733</span> </span><span class="WHIT">								</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>734</span> </span><span class="WHIT">									</span><span class="COMM">// We'll accept it only if we need</span><span class="WHIT">
<span class='line'>735</span> </span><span class="WHIT">									</span><span class="COMM">// whitespace, and this is an inline</span><span class="WHIT">
<span class='line'>736</span> </span><span class="WHIT">									</span><span class="COMM">// element with whitespace only.</span><span class="WHIT">
<span class='line'>737</span> </span><span class="WHIT">									</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dtd.$removeEmpty</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">sibling.getName</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>738</span> </span><span class="WHIT">									</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>739</span> </span><span class="WHIT">										</span><span class="COMM">// It must contains spaces and inline elements only.</span><span class="WHIT">
<span class='line'>740</span>
<span class='line'>741</span> </span><span class="WHIT">										</span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.getText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>742</span>
<span class='line'>743</span> </span><span class="WHIT">										</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="REGX">/[^\s\ufeff]/</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">	</span><span class="COMM">// Spaces + Zero Width No-Break Space (U+FEFF)</span><span class="WHIT">
<span class='line'>744</span> </span><span class="WHIT">											</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>745</span> </span><span class="WHIT">										</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>746</span> </span><span class="WHIT">										</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>747</span> </span><span class="WHIT">											</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">allChildren</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.$.all</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">sibling.$.getElementsByTagName</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'*'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>748</span> </span><span class="WHIT">											</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">child</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">child</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">allChildren</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>749</span> </span><span class="WHIT">											</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>750</span> </span><span class="WHIT">												</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">CKEDITOR.dtd.$removeEmpty</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">child.nodeName.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>751</span> </span><span class="WHIT">												</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>752</span> </span><span class="WHIT">													</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>753</span> </span><span class="WHIT">													</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>754</span> </span><span class="WHIT">												</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>755</span> </span><span class="WHIT">											</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>756</span> </span><span class="WHIT">										</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>757</span>
<span class='line'>758</span> </span><span class="WHIT">										</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>759</span> </span><span class="WHIT">											</span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">!</span><span class="NAME">siblingText.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>760</span> </span><span class="WHIT">									</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>761</span> </span><span class="WHIT">									</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>762</span> </span><span class="WHIT">										</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>763</span> </span><span class="WHIT">								</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>764</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>765</span>
<span class='line'>766</span> </span><span class="WHIT">							</span><span class="COMM">// A node with whitespaces has been found.</span><span class="WHIT">
<span class='line'>767</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>768</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>769</span> </span><span class="WHIT">								</span><span class="COMM">// Enlarge the last enlargeable node, if we</span><span class="WHIT">
<span class='line'>770</span> </span><span class="WHIT">								</span><span class="COMM">// were waiting for spaces.</span><span class="WHIT">
<span class='line'>771</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>772</span> </span><span class="WHIT">								</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>773</span> </span><span class="WHIT">									</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>774</span> </span><span class="WHIT">										</span><span class="NAME">startTop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>775</span> </span><span class="WHIT">									</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>776</span> </span><span class="WHIT">										</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>777</span> </span><span class="WHIT">								</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>778</span> </span><span class="WHIT">								</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>779</span> </span><span class="WHIT">									</span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>780</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>781</span>
<span class='line'>782</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>783</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>784</span> </span><span class="WHIT">								</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.getPrevious</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>785</span>
<span class='line'>786</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>787</span> </span><span class="WHIT">								</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>788</span> </span><span class="WHIT">									</span><span class="COMM">// Set the sibling as enlargeable, so it's</span><span class="WHIT">
<span class='line'>789</span> </span><span class="WHIT">									</span><span class="COMM">// parent will be get later outside this while.</span><span class="WHIT">
<span class='line'>790</span> </span><span class="WHIT">									</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>791</span> </span><span class="WHIT">									</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>792</span> </span><span class="WHIT">									</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>793</span> </span><span class="WHIT">								</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>794</span>
<span class='line'>795</span> </span><span class="WHIT">								</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>796</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>797</span> </span><span class="WHIT">							</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>798</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>799</span> </span><span class="WHIT">								</span><span class="COMM">// If sibling has been set to null, then we</span><span class="WHIT">
<span class='line'>800</span> </span><span class="WHIT">								</span><span class="COMM">// need to stop enlarging.</span><span class="WHIT">
<span class='line'>801</span> </span><span class="WHIT">								</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>802</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>803</span> </span><span class="WHIT">						</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>804</span>
<span class='line'>805</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>806</span> </span><span class="WHIT">							</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>807</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>808</span>
<span class='line'>809</span> </span><span class="WHIT">					</span><span class="COMM">// Process the end boundary. This is basically the same</span><span class="WHIT">
<span class='line'>810</span> </span><span class="WHIT">					</span><span class="COMM">// code used for the start boundary, with small changes to</span><span class="WHIT">
<span class='line'>811</span> </span><span class="WHIT">					</span><span class="COMM">// make it work in the oposite side (to the right). This</span><span class="WHIT">
<span class='line'>812</span> </span><span class="WHIT">					</span><span class="COMM">// makes it difficult to reuse the code here. So, fixes to</span><span class="WHIT">
<span class='line'>813</span> </span><span class="WHIT">					</span><span class="COMM">// the above code are likely to be replicated here.</span><span class="WHIT">
<span class='line'>814</span>
<span class='line'>815</span> </span><span class="WHIT">					</span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>816</span> </span><span class="WHIT">					</span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>817</span>
<span class='line'>818</span> </span><span class="WHIT">					</span><span class="COMM">// Reset the common variables.</span><span class="WHIT">
<span class='line'>819</span> </span><span class="WHIT">					</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>820</span> </span><span class="WHIT">					</span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>821</span>
<span class='line'>822</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>823</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>824</span> </span><span class="WHIT">						</span><span class="COMM">// Check if there is any non-space text after the</span><span class="WHIT">
<span class='line'>825</span> </span><span class="WHIT">						</span><span class="COMM">// offset. Otherwise, container is null.</span><span class="WHIT">
<span class='line'>826</span> </span><span class="WHIT">						</span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">CKEDITOR.tools.trim</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container.substring</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">length</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>827</span>
<span class='line'>828</span> </span><span class="WHIT">						</span><span class="COMM">// If we found only whitespace in the node, it</span><span class="WHIT">
<span class='line'>829</span> </span><span class="WHIT">						</span><span class="COMM">// means that we'll need more whitespace to be able</span><span class="WHIT">
<span class='line'>830</span> </span><span class="WHIT">						</span><span class="COMM">// to expand. For example, &lt;i> can be expanded in</span><span class="WHIT">
<span class='line'>831</span> </span><span class="WHIT">						</span><span class="COMM">// "A &lt;i> [B]&lt;/i>", but not in "A&lt;i> [B]&lt;/i>".</span><span class="WHIT">
<span class='line'>832</span> </span><span class="WHIT">						</span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">container.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>833</span>
<span class='line'>834</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">container</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>835</span> </span><span class="WHIT">						</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>836</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.getNext</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>837</span> </span><span class="WHIT">								</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>838</span> </span><span class="WHIT">						</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>839</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>840</span> </span><span class="WHIT">					</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>841</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>842</span> </span><span class="WHIT">						</span><span class="COMM">// Get the node right after the boudary to be checked</span><span class="WHIT">
<span class='line'>843</span> </span><span class="WHIT">						</span><span class="COMM">// first.</span><span class="WHIT">
<span class='line'>844</span> </span><span class="WHIT">						</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">offset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>845</span>
<span class='line'>846</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>847</span> </span><span class="WHIT">							</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">container</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>848</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>849</span>
<span class='line'>850</span> </span><span class="WHIT">					</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>851</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>852</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>853</span> </span><span class="WHIT">						</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>854</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">enlargeable.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonAncestor</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>855</span> </span><span class="WHIT">								</span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>856</span>
<span class='line'>857</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">body.contains</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>858</span> </span><span class="WHIT">								</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>859</span>
<span class='line'>860</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">enlargeable.getComputedStyle</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'display'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'inline'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>861</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>862</span> </span><span class="WHIT">								</span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>863</span>
<span class='line'>864</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>865</span> </span><span class="WHIT">									</span><span class="NAME">endTop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>866</span> </span><span class="WHIT">								</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>867</span> </span><span class="WHIT">									</span><span class="NAME">this.setEndAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>868</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>869</span>
<span class='line'>870</span> </span><span class="WHIT">							</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable.getNext</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>871</span> </span><span class="WHIT">						</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>872</span>
<span class='line'>873</span> </span><span class="WHIT">						</span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>874</span> </span><span class="WHIT">						</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>875</span> </span><span class="WHIT">							</span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>876</span>
<span class='line'>877</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>878</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>879</span> </span><span class="WHIT">								</span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.getText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>880</span>
<span class='line'>881</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="REGX">/[^\s\ufeff]/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>882</span> </span><span class="WHIT">									</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>883</span>
<span class='line'>884</span> </span><span class="WHIT">								</span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="REGX">/^[\s\ufeff]/</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>885</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>886</span> </span><span class="WHIT">							</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>887</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>888</span> </span><span class="WHIT">								</span><span class="COMM">// If this is a visible element.</span><span class="WHIT">
<span class='line'>889</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling.$.offsetWidth</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>890</span> </span><span class="WHIT">								</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>891</span> </span><span class="WHIT">									</span><span class="COMM">// We'll accept it only if we need</span><span class="WHIT">
<span class='line'>892</span> </span><span class="WHIT">									</span><span class="COMM">// whitespace, and this is an inline</span><span class="WHIT">
<span class='line'>893</span> </span><span class="WHIT">									</span><span class="COMM">// element with whitespace only.</span><span class="WHIT">
<span class='line'>894</span> </span><span class="WHIT">									</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dtd.$removeEmpty</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">sibling.getName</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>895</span> </span><span class="WHIT">									</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>896</span> </span><span class="WHIT">										</span><span class="COMM">// It must contains spaces and inline elements only.</span><span class="WHIT">
<span class='line'>897</span>
<span class='line'>898</span> </span><span class="WHIT">										</span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.getText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>899</span>
<span class='line'>900</span> </span><span class="WHIT">										</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">(</span><span class="REGX">/[^\s\ufeff]/</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">siblingText</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>901</span> </span><span class="WHIT">											</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>902</span> </span><span class="WHIT">										</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>903</span> </span><span class="WHIT">										</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>904</span> </span><span class="WHIT">											</span><span class="NAME">allChildren</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.$.all</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="NAME">sibling.$.getElementsByTagName</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'*'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>905</span> </span><span class="WHIT">											</span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">child</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">allChildren</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>906</span> </span><span class="WHIT">											</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>907</span> </span><span class="WHIT">												</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">CKEDITOR.dtd.$removeEmpty</span><span class="PUNC">[</span><span class="WHIT"> </span><span class="NAME">child.nodeName.toLowerCase</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>908</span> </span><span class="WHIT">												</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>909</span> </span><span class="WHIT">													</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>910</span> </span><span class="WHIT">													</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>911</span> </span><span class="WHIT">												</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>912</span> </span><span class="WHIT">											</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>913</span> </span><span class="WHIT">										</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>914</span>
<span class='line'>915</span> </span><span class="WHIT">										</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>916</span> </span><span class="WHIT">											</span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="PUNC">!</span><span class="NAME">siblingText.length</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>917</span> </span><span class="WHIT">									</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>918</span> </span><span class="WHIT">									</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>919</span> </span><span class="WHIT">										</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>920</span> </span><span class="WHIT">								</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>921</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>922</span>
<span class='line'>923</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">isWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>924</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>925</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">needsWhiteSpace</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>926</span> </span><span class="WHIT">								</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>927</span> </span><span class="WHIT">									</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonReached</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>928</span> </span><span class="WHIT">										</span><span class="NAME">endTop</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>929</span> </span><span class="WHIT">									</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>930</span> </span><span class="WHIT">										</span><span class="NAME">this.setEndAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>931</span> </span><span class="WHIT">								</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>932</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>933</span>
<span class='line'>934</span> </span><span class="WHIT">							</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>935</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>936</span> </span><span class="WHIT">								</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling.getNext</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>937</span>
<span class='line'>938</span> </span><span class="WHIT">								</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">next</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>939</span> </span><span class="WHIT">								</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>940</span> </span><span class="WHIT">									</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">sibling</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>941</span> </span><span class="WHIT">									</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>942</span> </span><span class="WHIT">									</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>943</span> </span><span class="WHIT">								</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>944</span>
<span class='line'>945</span> </span><span class="WHIT">								</span><span class="NAME">sibling</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">next</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>946</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>947</span> </span><span class="WHIT">							</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>948</span> </span><span class="WHIT">							</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>949</span> </span><span class="WHIT">								</span><span class="COMM">// If sibling has been set to null, then we</span><span class="WHIT">
<span class='line'>950</span> </span><span class="WHIT">								</span><span class="COMM">// need to stop enlarging.</span><span class="WHIT">
<span class='line'>951</span> </span><span class="WHIT">								</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>952</span> </span><span class="WHIT">							</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>953</span> </span><span class="WHIT">						</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>954</span>
<span class='line'>955</span> </span><span class="WHIT">						</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>956</span> </span><span class="WHIT">							</span><span class="NAME">enlargeable</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">enlargeable.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>957</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>958</span>
<span class='line'>959</span> </span><span class="WHIT">					</span><span class="COMM">// If the common ancestor can be enlarged by both boundaries, then include it also.</span><span class="WHIT">
<span class='line'>960</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startTop</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">endTop</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>961</span> </span><span class="WHIT">					</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>962</span> </span><span class="WHIT">						</span><span class="NAME">commonAncestor</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startTop.contains</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endTop</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">endTop</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">startTop</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>963</span>
<span class='line'>964</span> </span><span class="WHIT">						</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonAncestor</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>965</span> </span><span class="WHIT">						</span><span class="NAME">this.setEndAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">commonAncestor</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>966</span> </span><span class="WHIT">					</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>967</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>968</span>
<span class='line'>969</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.ENLARGE_BLOCK_CONTENTS</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>970</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>971</span> </span><span class="WHIT">					</span><span class="COMM">// DFS backward to get the block/list item boundary at or before the start.</span><span class="WHIT">
<span class='line'>972</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">boundaryNodes</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getBoundaryNodes.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>973</span> </span><span class="WHIT">						</span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">boundaryNodes.startNode</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>974</span> </span><span class="WHIT">						</span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">boundaryNodes.endNode</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>975</span> </span><span class="WHIT">						</span><span class="NAME">guardFunction</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">unit</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.ENLARGE_BLOCK_CONTENTS</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT">
<span class='line'>976</span> </span><span class="WHIT">							</span><span class="NAME">CKEDITOR.dom.domWalker.blockBoundary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>977</span> </span><span class="WHIT">							</span><span class="NAME">CKEDITOR.dom.domWalker.listItemBoundary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>978</span> </span><span class="WHIT">						</span><span class="NAME">walker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.domWalker</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>979</span> </span><span class="WHIT">						</span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">walker.reverse</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">guardFunction</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>980</span> </span><span class="WHIT">						</span><span class="NAME">boundaryEvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.events.shift</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>981</span>
<span class='line'>982</span> </span><span class="WHIT">					</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">boundaryEvent.from</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>983</span>
<span class='line'>984</span> </span><span class="WHIT">					</span><span class="COMM">// DFS forward to get the block/list item boundary at or before the end.</span><span class="WHIT">
<span class='line'>985</span> </span><span class="WHIT">					</span><span class="NAME">walker.setNode</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>986</span> </span><span class="WHIT">					</span><span class="NAME">data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">walker.forward</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">guardFunction</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>987</span> </span><span class="WHIT">					</span><span class="NAME">boundaryEvent</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">data.events.shift</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>988</span>
<span class='line'>989</span> </span><span class="WHIT">					</span><span class="NAME">this.setEndAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">boundaryEvent.from</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>990</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>991</span>
<span class='line'>992</span> </span><span class="WHIT">				</span><span class="KEYW">default</span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>993</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>994</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>995</span>
<span class='line'>996</span> </span><span class="WHIT">		</span><span class="COMM">/**
<span class='line'>997</span> 		 * Inserts a node at the start of the range. The range will be expanded
<span class='line'>998</span> 		 * the contain the node.
<span class='line'>999</span> 		 */</span><span class="WHIT">
<span class='line'>1000</span> </span><span class="WHIT">		</span><span class="NAME">insertNode</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1001</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1002</span> </span><span class="WHIT">			</span><span class="NAME">this.trim</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1003</span>
<span class='line'>1004</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1005</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1006</span>
<span class='line'>1007</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">nextNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startContainer.getChild</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1008</span>
<span class='line'>1009</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">nextNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1010</span> </span><span class="WHIT">				</span><span class="NAME">node.insertBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">nextNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1011</span> </span><span class="WHIT">			</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>1012</span> </span><span class="WHIT">				</span><span class="NAME">startContainer.append</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1013</span>
<span class='line'>1014</span> </span><span class="WHIT">			</span><span class="COMM">// Check if we need to update the end boundary.</span><span class="WHIT">
<span class='line'>1015</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1016</span> </span><span class="WHIT">				</span><span class="NAME">this.endOffset</span><span class="PUNC">++</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1017</span>
<span class='line'>1018</span> </span><span class="WHIT">			</span><span class="COMM">// Expand the range to embrace the new node.</span><span class="WHIT">
<span class='line'>1019</span> </span><span class="WHIT">			</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1020</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1021</span>
<span class='line'>1022</span> </span><span class="WHIT">		</span><span class="NAME">moveToPosition</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1023</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1024</span> </span><span class="WHIT">			</span><span class="NAME">this.setStartAt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1025</span> </span><span class="WHIT">			</span><span class="NAME">this.collapse</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1026</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1027</span>
<span class='line'>1028</span> </span><span class="WHIT">		</span><span class="NAME">selectNodeContents</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1029</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1030</span> </span><span class="WHIT">			</span><span class="NAME">this.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1031</span> </span><span class="WHIT">			</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">?</span><span class="WHIT"> </span><span class="NAME">node.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">node.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1032</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1033</span>
<span class='line'>1034</span> </span><span class="WHIT">		</span><span class="COMM">/**
<span class='line'>1035</span> 		 * Sets the start position of a Range.
<span class='line'>1036</span> 		 * @param {CKEDITOR.dom.node} startNode The node to start the range.
<span class='line'>1037</span> 		 * @param {Number} startOffset An integer greater than or equal to zero
<span class='line'>1038</span> 		 *		representing the offset for the start of the range from the start
<span class='line'>1039</span> 		 *		of startNode.
<span class='line'>1040</span> 		 */</span><span class="WHIT">
<span class='line'>1041</span> </span><span class="WHIT">		</span><span class="NAME">setStart</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1042</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1043</span> </span><span class="WHIT">			</span><span class="COMM">// W3C requires a check for the new position. If it is after the end</span><span class="WHIT">
<span class='line'>1044</span> </span><span class="WHIT">			</span><span class="COMM">// boundary, the range should be collapsed to the new start. It seams</span><span class="WHIT">
<span class='line'>1045</span> </span><span class="WHIT">			</span><span class="COMM">// we will not need this check for our use of this class so we can</span><span class="WHIT">
<span class='line'>1046</span> </span><span class="WHIT">			</span><span class="COMM">// ignore it for now.</span><span class="WHIT">
<span class='line'>1047</span>
<span class='line'>1048</span> </span><span class="WHIT">			</span><span class="NAME">this.startContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1049</span> </span><span class="WHIT">			</span><span class="NAME">this.startOffset</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1050</span>
<span class='line'>1051</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.endContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1052</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1053</span> </span><span class="WHIT">				</span><span class="NAME">this.endContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1054</span> </span><span class="WHIT">				</span><span class="NAME">this.endOffset</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1055</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1056</span>
<span class='line'>1057</span> </span><span class="WHIT">			</span><span class="NAME">updateCollapsed</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1058</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1059</span>
<span class='line'>1060</span> </span><span class="WHIT">		</span><span class="COMM">/**
<span class='line'>1061</span> 		 * Sets the end position of a Range.
<span class='line'>1062</span> 		 * @param {CKEDITOR.dom.node} endNode The node to end the range.
<span class='line'>1063</span> 		 * @param {Number} endOffset An integer greater than or equal to zero
<span class='line'>1064</span> 		 *		representing the offset for the end of the range from the start
<span class='line'>1065</span> 		 *		of endNode.
<span class='line'>1066</span> 		 */</span><span class="WHIT">
<span class='line'>1067</span> </span><span class="WHIT">		</span><span class="NAME">setEnd</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1068</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1069</span> </span><span class="WHIT">			</span><span class="COMM">// W3C requires a check for the new position. If it is before the start</span><span class="WHIT">
<span class='line'>1070</span> </span><span class="WHIT">			</span><span class="COMM">// boundary, the range should be collapsed to the new end. It seams we</span><span class="WHIT">
<span class='line'>1071</span> </span><span class="WHIT">			</span><span class="COMM">// will not need this check for our use of this class so we can ignore</span><span class="WHIT">
<span class='line'>1072</span> </span><span class="WHIT">			</span><span class="COMM">// it for now.</span><span class="WHIT">
<span class='line'>1073</span>
<span class='line'>1074</span> </span><span class="WHIT">			</span><span class="NAME">this.endContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1075</span> </span><span class="WHIT">			</span><span class="NAME">this.endOffset</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1076</span>
<span class='line'>1077</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">this.startContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1078</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1079</span> </span><span class="WHIT">				</span><span class="NAME">this.startContainer</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1080</span> </span><span class="WHIT">				</span><span class="NAME">this.startOffset</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1081</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1082</span>
<span class='line'>1083</span> </span><span class="WHIT">			</span><span class="NAME">updateCollapsed</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1084</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1085</span>
<span class='line'>1086</span> </span><span class="WHIT">		</span><span class="NAME">setStartAfter</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1087</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1088</span> </span><span class="WHIT">			</span><span class="NAME">this.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1089</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1090</span>
<span class='line'>1091</span> </span><span class="WHIT">		</span><span class="NAME">setStartBefore</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1092</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1093</span> </span><span class="WHIT">			</span><span class="NAME">this.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1094</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1095</span>
<span class='line'>1096</span> </span><span class="WHIT">		</span><span class="NAME">setEndAfter</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1097</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1098</span> </span><span class="WHIT">			</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1099</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1100</span>
<span class='line'>1101</span> </span><span class="WHIT">		</span><span class="NAME">setEndBefore</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1102</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1103</span> </span><span class="WHIT">			</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.getParent</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getIndex</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1104</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1105</span>
<span class='line'>1106</span> </span><span class="WHIT">		</span><span class="NAME">setStartAt</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1107</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1108</span> </span><span class="WHIT">			</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1109</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1110</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_AFTER_START</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1111</span> </span><span class="WHIT">					</span><span class="NAME">this.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1112</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1113</span>
<span class='line'>1114</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_END</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1115</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1116</span> </span><span class="WHIT">						</span><span class="NAME">this.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1117</span> </span><span class="WHIT">					</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>1118</span> </span><span class="WHIT">						</span><span class="NAME">this.setStart</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1119</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1120</span>
<span class='line'>1121</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_START</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1122</span> </span><span class="WHIT">					</span><span class="NAME">this.setStartBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1123</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1124</span>
<span class='line'>1125</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_AFTER_END</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1126</span> </span><span class="WHIT">					</span><span class="NAME">this.setStartAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1127</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1128</span>
<span class='line'>1129</span> </span><span class="WHIT">			</span><span class="NAME">updateCollapsed</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1130</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1131</span>
<span class='line'>1132</span> </span><span class="WHIT">		</span><span class="NAME">setEndAt</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1133</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1134</span> </span><span class="WHIT">			</span><span class="KEYW">switch</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">position</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1135</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1136</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_AFTER_START</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1137</span> </span><span class="WHIT">					</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1138</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1139</span>
<span class='line'>1140</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_END</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1141</span> </span><span class="WHIT">					</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1142</span> </span><span class="WHIT">						</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getLength</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1143</span> </span><span class="WHIT">					</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>1144</span> </span><span class="WHIT">						</span><span class="NAME">this.setEnd</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">node.getChildCount</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1145</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1146</span>
<span class='line'>1147</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_START</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1148</span> </span><span class="WHIT">					</span><span class="NAME">this.setEndBefore</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1149</span> </span><span class="WHIT">					</span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1150</span>
<span class='line'>1151</span> </span><span class="WHIT">				</span><span class="KEYW">case</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_AFTER_END</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT">
<span class='line'>1152</span> </span><span class="WHIT">					</span><span class="NAME">this.setEndAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">node</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1153</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1154</span>
<span class='line'>1155</span> </span><span class="WHIT">			</span><span class="NAME">updateCollapsed</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1156</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1157</span>
<span class='line'>1158</span> </span><span class="WHIT">		</span><span class="COMM">// TODO: The fixed block isn't trimmed, does not work for &lt;pre>.</span><span class="WHIT">
<span class='line'>1159</span> </span><span class="WHIT">		</span><span class="COMM">// TODO: Does not add bogus &lt;br> to empty fixed blocks.</span><span class="WHIT">
<span class='line'>1160</span> </span><span class="WHIT">		</span><span class="NAME">fixBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">isStart</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blockTag</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1161</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1162</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">bookmark</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.createBookmark</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1163</span> </span><span class="WHIT">				</span><span class="NAME">fixedBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.element</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">blockTag</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">this.document</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1164</span> </span><span class="WHIT">			</span><span class="NAME">this.collapse</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">isStart</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1165</span> </span><span class="WHIT">			</span><span class="NAME">this.enlarge</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.ENLARGE_BLOCK_CONTENTS</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1166</span> </span><span class="WHIT">			</span><span class="NAME">this.extractContents</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">appendTo</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">fixedBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1167</span> </span><span class="WHIT">			</span><span class="NAME">this.insertNode</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">fixedBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1168</span> </span><span class="WHIT">			</span><span class="NAME">this.moveToBookmark</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">bookmark</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1169</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">fixedBlock</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1170</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1171</span>
<span class='line'>1172</span> </span><span class="WHIT">		</span><span class="NAME">splitBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">blockTag</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1173</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1174</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.elementPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1175</span> </span><span class="WHIT">				</span><span class="NAME">endPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.elementPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1176</span> </span><span class="WHIT">				</span><span class="NAME">startBlockLimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startPath.blockLimit</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1177</span> </span><span class="WHIT">				</span><span class="NAME">endBlockLimit</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endPath.blockLimit</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1178</span> </span><span class="WHIT">				</span><span class="NAME">startBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startPath.block</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1179</span> </span><span class="WHIT">				</span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endPath.block</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1180</span> </span><span class="WHIT">				</span><span class="NAME">elementPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1181</span>
<span class='line'>1182</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">startBlockLimit.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endBlockLimit</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1183</span> </span><span class="WHIT">				</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1184</span>
<span class='line'>1185</span> </span><span class="WHIT">			</span><span class="COMM">// Get or fix current blocks.</span><span class="WHIT">
<span class='line'>1186</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">blockTag</span><span class="WHIT"> </span><span class="PUNC">!=</span><span class="WHIT"> </span><span class="STRN">'br'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1187</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1188</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">startBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1189</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1190</span> </span><span class="WHIT">					</span><span class="NAME">startBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fixBlock</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blockTag</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1191</span> </span><span class="WHIT">					</span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.elementPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1192</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1193</span>
<span class='line'>1194</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1195</span> </span><span class="WHIT">					</span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.fixBlock</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">blockTag</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1196</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1197</span>
<span class='line'>1198</span> </span><span class="WHIT">			</span><span class="COMM">// Get the range position.</span><span class="WHIT">
<span class='line'>1199</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">isStartOfBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startBlock</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.checkStartOfBlock</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1200</span> </span><span class="WHIT">				</span><span class="NAME">isEndOfBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">this.checkEndOfBlock</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1201</span>
<span class='line'>1202</span> </span><span class="WHIT">			</span><span class="COMM">// Delete the current contents.</span><span class="WHIT">
<span class='line'>1203</span> </span><span class="WHIT">			</span><span class="COMM">// TODO: Why is 2.x doing CheckIsEmpty()?</span><span class="WHIT">
<span class='line'>1204</span> </span><span class="WHIT">			</span><span class="NAME">this.deleteContents</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1205</span>
<span class='line'>1206</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startBlock</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">startBlock.equals</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1207</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1208</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">isEndOfBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1209</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1210</span> </span><span class="WHIT">					</span><span class="NAME">elementPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.elementPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1211</span> </span><span class="WHIT">					</span><span class="NAME">this.moveToPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endBlock</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_AFTER_END</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1212</span> </span><span class="WHIT">					</span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1213</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1214</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">isStartOfBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1215</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1216</span> </span><span class="WHIT">					</span><span class="NAME">elementPath</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.elementPath</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1217</span> </span><span class="WHIT">					</span><span class="NAME">this.moveToPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startBlock</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_START</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1218</span> </span><span class="WHIT">					</span><span class="NAME">startBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1219</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1220</span> </span><span class="WHIT">				</span><span class="KEYW">else</span><span class="WHIT">
<span class='line'>1221</span> </span><span class="WHIT">				</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1222</span> </span><span class="WHIT">					</span><span class="COMM">// Extract the contents of the block from the selection point to the end</span><span class="WHIT">
<span class='line'>1223</span> </span><span class="WHIT">					</span><span class="COMM">// of its contents.</span><span class="WHIT">
<span class='line'>1224</span> </span><span class="WHIT">					</span><span class="NAME">this.setEndAt</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startBlock</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_END</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1225</span> </span><span class="WHIT">					</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">documentFragment</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.extractContents</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1226</span>
<span class='line'>1227</span> </span><span class="WHIT">					</span><span class="COMM">// Duplicate the block element after it.</span><span class="WHIT">
<span class='line'>1228</span> </span><span class="WHIT">					</span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">startBlock.clone</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1229</span> </span><span class="WHIT">					</span><span class="NAME">endBlock.removeAttribute</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'id'</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1230</span>
<span class='line'>1231</span> </span><span class="WHIT">					</span><span class="COMM">// Place the extracted contents into the duplicated block.</span><span class="WHIT">
<span class='line'>1232</span> </span><span class="WHIT">					</span><span class="NAME">documentFragment.appendTo</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1233</span> </span><span class="WHIT">					</span><span class="NAME">endBlock.insertAfter</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startBlock</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1234</span> </span><span class="WHIT">					</span><span class="NAME">this.moveToPosition</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startBlock</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.POSITION_AFTER_END</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1235</span>
<span class='line'>1236</span> </span><span class="WHIT">					</span><span class="COMM">// TODO: Append bogus br to startBlock for Gecko</span><span class="WHIT">
<span class='line'>1237</span> </span><span class="WHIT">				</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1238</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1239</span>
<span class='line'>1240</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1241</span> </span><span class="WHIT">				</span><span class="NAME">previousBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">startBlock</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1242</span> </span><span class="WHIT">				</span><span class="NAME">nextBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">endBlock</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1243</span> </span><span class="WHIT">				</span><span class="NAME">wasStartOfBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">isStartOfBlock</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1244</span> </span><span class="WHIT">				</span><span class="NAME">wasEndOfBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">isEndOfBlock</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1245</span> </span><span class="WHIT">				</span><span class="NAME">elementPath</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">elementPath</span><span class="WHIT">
<span class='line'>1246</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1247</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1248</span>
<span class='line'>1249</span> </span><span class="WHIT">		</span><span class="NAME">checkStartOfBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1250</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1251</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startContainer</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1252</span> </span><span class="WHIT">				</span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.startOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1253</span>
<span class='line'>1254</span> </span><span class="WHIT">			</span><span class="COMM">// If the starting node is a text node, and non-empty before the offset,</span><span class="WHIT">
<span class='line'>1255</span> </span><span class="WHIT">			</span><span class="COMM">// then we're surely not at the start of block.</span><span class="WHIT">
<span class='line'>1256</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startContainer.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1257</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1258</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textBefore</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.tools.ltrim</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startContainer.getText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">startOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1259</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">textBefore.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1260</span> </span><span class="WHIT">					</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1261</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1262</span>
<span class='line'>1263</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getBoundaryNodes.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">startNode</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1264</span> </span><span class="WHIT">				</span><span class="NAME">walker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.domWalker</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">startNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1265</span>
<span class='line'>1266</span> </span><span class="WHIT">			</span><span class="COMM">// DFS backwards until the block boundary, with the checker function.</span><span class="WHIT">
<span class='line'>1267</span> </span><span class="WHIT">			</span><span class="NAME">walker.on</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'step'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">getCheckStartEndBlockFunction</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">true</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1268</span> </span><span class="WHIT">			</span><span class="NAME">walker.reverse</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.domWalker.blockBoundary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1269</span>
<span class='line'>1270</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">walker.checkFailed</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1271</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1272</span>
<span class='line'>1273</span> </span><span class="WHIT">		</span><span class="NAME">checkEndOfBlock</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1274</span> </span><span class="WHIT">		</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1275</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endContainer</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endContainer</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1276</span> </span><span class="WHIT">				</span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">this.endOffset</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1277</span>
<span class='line'>1278</span> </span><span class="WHIT">			</span><span class="COMM">// If the ending node is a text node, and non-empty after the offset,</span><span class="WHIT">
<span class='line'>1279</span> </span><span class="WHIT">			</span><span class="COMM">// then we're surely not at the end of block.</span><span class="WHIT">
<span class='line'>1280</span> </span><span class="WHIT">			</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endContainer.type</span><span class="WHIT"> </span><span class="PUNC">==</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.NODE_TEXT</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1281</span> </span><span class="WHIT">			</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>1282</span> </span><span class="WHIT">				</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">textAfter</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.tools.rtrim</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endContainer.getText</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">substr</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endOffset</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1283</span> </span><span class="WHIT">				</span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">textAfter.length</span><span class="WHIT"> </span><span class="PUNC">></span><span class="WHIT"> </span><span class="NUMB">0</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>1284</span> </span><span class="WHIT">					</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1285</span> </span><span class="WHIT">			</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1286</span>
<span class='line'>1287</span> </span><span class="WHIT">			</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getBoundaryNodes.apply</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">this</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">endNode</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>1288</span> </span><span class="WHIT">				</span><span class="NAME">walker</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.domWalker</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">endNode</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1289</span>
<span class='line'>1290</span> </span><span class="WHIT">			</span><span class="COMM">// DFS forward until the block boundary, with the checker function.</span><span class="WHIT">
<span class='line'>1291</span> </span><span class="WHIT">			</span><span class="NAME">walker.on</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="STRN">'step'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">getCheckStartEndBlockFunction</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="KEYW">false</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="KEYW">null</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">20</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1292</span> </span><span class="WHIT">			</span><span class="NAME">walker.forward</span><span class="PUNC">(</span><span class="WHIT"> </span><span class="NAME">CKEDITOR.dom.domWalker.blockBoundary</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1293</span>
<span class='line'>1294</span> </span><span class="WHIT">			</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">walker.checkFailed</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1295</span> </span><span class="WHIT">		</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>1296</span> </span><span class="WHIT">	</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1297</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1298</span>
<span class='line'>1299</span> </span><span class="NAME">CKEDITOR.POSITION_AFTER_START</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// &lt;element>^contents&lt;/element>		"^text"</span><span class="WHIT">
<span class='line'>1300</span> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_END</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// &lt;element>contents^&lt;/element>		"text^"</span><span class="WHIT">
<span class='line'>1301</span> </span><span class="NAME">CKEDITOR.POSITION_BEFORE_START</span><span class="WHIT">	</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// ^&lt;element>contents&lt;/element>		^"text"</span><span class="WHIT">
<span class='line'>1302</span> </span><span class="NAME">CKEDITOR.POSITION_AFTER_END</span><span class="WHIT">		</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">4</span><span class="PUNC">;</span><span class="WHIT">	</span><span class="COMM">// &lt;element>contents&lt;/element>^		"text"</span><span class="WHIT">
<span class='line'>1303</span>
<span class='line'>1304</span> </span><span class="NAME">CKEDITOR.ENLARGE_ELEMENT</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1305</span> </span><span class="NAME">CKEDITOR.ENLARGE_BLOCK_CONTENTS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">2</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1306</span> </span><span class="NAME">CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">3</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>1307</span> </span></pre></body></html>
